package com.demo.framework.ui;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;

import com.demo.app.ProjectApplication;
import com.demo.framework.FrameworkApplication;

/**
 * 
 * @ClassName: BaseActivity
 * @Description: TODO(应用程序的基类)
 * @author 谢云腾
 * @date 2013-3-25 下午01:59:20
 * @version 1.0
 */
public abstract class BaseActivity extends Activity {

    /**
     * 是否需要标题
     */
    private boolean blHasNavigationBar = false;

    private Handler handler = null;

    // 在返回后是否重新加载数据
    private boolean isReloadData = false;

    public BaseActivity() {
        this(true);
    }

    public BaseActivity(boolean hasNavigationBar) {
        this(hasNavigationBar, false);
    }

    /**
     * <p>
     * Title:
     * </p>
     * <p>
     * Description:
     * </p>
     * 
     * @param hasNavigationBar
     *            设置标题
     * @param blScreenPortrait
     *            是否重新加载数据
     */
    public BaseActivity(boolean hasNavigationBar, boolean isReloadData) {
        this.blHasNavigationBar = hasNavigationBar;
        this.isReloadData = isReloadData;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        FrameworkApplication.getInstance().addActivity(this);

    }

    /**
     * 设置ContentView，如果 hasNavigationBar 为 true 显示 Navigation Bar
     */
    @Override
    public void setContentView(int layoutResID) {
        if (blHasNavigationBar) {
            // requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
            super.setContentView(layoutResID);
            // getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,
            // R.layout.title_bar);
        }
        else {
            super.setContentView(layoutResID);
        }

        // 初始化组件
        setupView();
    }

    /**
     * 初始化组件
     */
    protected abstract void setupView();

    /**
     * (非 Javadoc)
     * <p>
     * Title: onResume
     * </p>
     * <p>
     * Description: 用于重新加载数据，特别是返回上个界面，需要重新加载数据时
     * </p>
     * 
     * @see android.app.Activity#onResume()
     */
    @Override
    public void onResume() {
        if (isReloadData) {
            loadData();
            updateView();
        }
        super.onResume();
    }

    /**
     * 载入数据，在主线程执行。
     */
    protected void loadData() {
    }

    /**
     * 更新界面显示数据，在主线程执行。
     */
    protected void updateView() {
    }

    public void post(final Runnable r) {
        this.handler.post(new Runnable() {
            @Override
            public void run() {
                if (!isFinishing()) {
                    r.run();
                }
            }

        });
    }

    public void post(final Runnable r, int waitingTime) {
        this.handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                if (!isFinishing()) {
                    r.run();
                }
            }

        }, waitingTime);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }
}
